﻿using GDM.Hogar.Entidades;
using GDM.Hogar.Repositorios.Contratos;
using GDM.Hogar.Repositorios.Core;
using GDM.Hogar.Repositorios.Soporte;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace GDM.Hogar.Repositorios
{
    public class PersonaReferenciaRepositorio : Repositorio, IPersonaReferenciaRepositorio
    {
        public PersonaReferenciaRepositorio(IDbManager dbManager)
            : base(dbManager)
        {
        }

        protected override string ProcActualizar
        {
            get
            {
                return ProcedimientosAlmacenados.PersonaReferencia.Actualizar;
            }
        }

        public void ActualizarPersonaReferencia(PersonaReferencia personaReferencia)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@PersonaReferenciaId", DbType.Int64, ParameterDirection.Input, personaReferencia.PersonaReferenciaId));
            parametros.Add(CrearParametro("@IntegranteId", DbType.Int64, ParameterDirection.Input, personaReferencia.IntegranteId));
            parametros.Add(CrearParametro("@Nombre", DbType.String, ParameterDirection.Input, personaReferencia.Nombre));
            parametros.Add(CrearParametro("@Apellido", DbType.String, ParameterDirection.Input, personaReferencia.Apellido));
            parametros.Add(CrearParametro("@Telefono", DbType.String, ParameterDirection.Input, personaReferencia.Telefono));
            if (personaReferencia.Edad.HasValue)
                parametros.Add(CrearParametro("@Edad", DbType.Int64, ParameterDirection.Input, personaReferencia.Edad));
            parametros.Add(CrearParametro("@TipoPersonaReferenciaId", DbType.Int64, ParameterDirection.Input, personaReferencia.TipoPersonaReferenciaId));
            parametros.Add(CrearParametro("@VinculoId", DbType.Int64, ParameterDirection.Input, personaReferencia.VinculoId));
            Actualizar(parametros);
        }

        public void EliminarPersonaReferencia(int personaReferenciaId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@PersonaReferenciaId", DbType.Int64, ParameterDirection.Input, personaReferenciaId));
            EjecutarConsulta(ProcedimientosAlmacenados.PersonaReferencia.Eliminar, parametros);
        }

        public void GuardarPersonaReferencia(PersonaReferencia personaReferencia)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@IntegranteId", DbType.Int64, ParameterDirection.Input, personaReferencia.IntegranteId));
            parametros.Add(CrearParametro("@Nombre", DbType.String, ParameterDirection.Input, personaReferencia.Nombre));
            parametros.Add(CrearParametro("@Apellido", DbType.String, ParameterDirection.Input, personaReferencia.Apellido));
            parametros.Add(CrearParametro("@Telefono", DbType.String, ParameterDirection.Input, personaReferencia.Telefono));
            if (personaReferencia.Edad.HasValue)
                parametros.Add(CrearParametro("@Edad", DbType.Int64, ParameterDirection.Input, personaReferencia.Edad));
            parametros.Add(CrearParametro("@TipoPersonaReferenciaId", DbType.Int64, ParameterDirection.Input, personaReferencia.TipoPersonaReferenciaId));
            parametros.Add(CrearParametro("@VinculoId", DbType.Int64, ParameterDirection.Input, personaReferencia.VinculoId));
            EjecutarConsulta(ProcedimientosAlmacenados.PersonaReferencia.Insertar, parametros);
        }

        public PersonaReferencia ObtenerPersonaReferencia(int personaReferenciaId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@PersonaReferenciaId", DbType.Int64, ParameterDirection.Input, personaReferenciaId));
            return Obtener<PersonaReferencia>(ProcedimientosAlmacenados.PersonaReferencia.Obtener, parametros).FirstOrDefault();
        }

        public IList<PersonaReferencia> ObtenerPersonasReferencia(int integranteId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@IntegranteId", DbType.Int64, ParameterDirection.Input, integranteId));
            return Obtener<PersonaReferencia>(ProcedimientosAlmacenados.PersonaReferencia.ObtenerTodas, parametros);
        }
    }
}